﻿package fr.babos.core.mvc 
{
	import fr.babos.core.bootstrap.IBootstrap;
	import fr.babos.core.dependences.IInjectable;
	import fr.babos.core.roles.IDisposable;
	import fr.babos.core.roles.IEngine;
	
	/**
	 * @author ZoulouX, pascal
	 */
	public interface IController extends IEngine, IDisposable, IInjectable
	{
		/**
		 * Les paramètres de la dernière action appelée
		 */
		function get params ():Object;
		function set params (value:Object):void;
		
		/**
		 * Le niveau du controlleur (uniquement spécifié si le bootstrap instancie ce controlleur)
		 */
		function get level ():int;
		function set level (value:int):void;
		
		/**
		 * Une référence vers le bootstrap qui a instancié ce controlleur
		 */
		function get bootstrap ():IBootstrap;
		function set bootstrap (value:IBootstrap):void;
		
		/**
		 * Si une action est autorsiée
		 * @param	pActionName : Le nom de l'action sur le controlleur
		 * @param	pParams : Les paramètres de l'action
		 */
		function isActionAllowed (pActionName:String, pParams:Object):Boolean;
		
		/**
		 * Appeler une action directement sur le controlleur (ne remontera pas le flux vers le bootstrap)
		 * @param	pActionName : Le nom de l'action sur le controlleur
		 * @param	pParams : Les paramètres de l'action
		 */
		//function callAction (pActionName:String, pParams:Object):Boolean;
	}
}